package com.huanglaoshi.java.io.fileoutputstream;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.junit.Test;


/**
 * IO体系：
 * 抽象基类	  		节点流（文件流）
 * InputStream      FileInputStream
 * OutputStream		FileOutputStream
 * Reader			FileReader
 * Writer			FileWriter
 * @author Administrator
 *
 */
public class FileOutputStreamTest {
	
	
	/**
	 * 从硬盘中读取1个文件并将它写入到另1个位置。相当于文件的复制
	 * @throws Exception
	 */
	@Test
	public void copyFileTest() {
		//要读取的文件
		//File in  = new File("io/hello.txt");
		File in  = new File("io/img/meimei.jpg");
		//要写入的文件
		//File out = new File("io/hello10086.txt");
		File out = new File("io/img/meimei234.jpg");
		
		//提供对应的流 只有流才能对文件的内部进行操作
		FileInputStream  fis = null;
		FileOutputStream fos = null;
		
		try {
			fis=new FileInputStream(in);
			fos=new FileOutputStream(out);
			
			//读 用字节数组读
			byte[] b = new byte[20]; //大小根据读的数据的有个最佳值
			int len;//真实写入了几个
			while((len=fis.read(b)) != -1){
				//fos.write(b);
				//fos.write(b,0,b.length);
				fos.write(b, 0, len);
			}
			System.out.println("文件复制完毕...");
		}catch (IOException e) {
			e.printStackTrace();
		}finally{
			//关闭输出流
			if(null != fos){
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			//关闭输入流
			if(null != fis){
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
		
	}
	
	
	/**
	 * 输出流：写入内容到文件中
	 */
	@Test
	public void write() {
		
		//1：new1个文件对象file,表明要写入的文件的位置 
		//输出流对应的物理文件hello2.txt可以不存在。如果不存在,会自动创建。如果存在，直接覆盖。 随机存储文件流
		File file = new File("io/hello2.txt");
		FileOutputStream fos = null;
		try {
			//2：new1个FileOutputStream对象fos。将这个文件对象file作为形参传递过来到构造方法中来。 输出流
			fos = new FileOutputStream(file);
			
			//3：写入操作
			fos.write(new String("I love China. I love the world.").getBytes());
			System.out.println("文件写入成功...");
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(null !=fos){
				try {
					//4：关闭输出流
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
	

}
